<!DOCTYPE html>
<html>
    <head>
        <title>SuDbAdmin</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
        <style type="text/css">
            body{font-size:12px; margin:0px;}
            textarea { border: none;}
            .default, .default textarea, .black, .black textarea { background-color:#000000; color:#33CC00;}
            .green, .green textarea { background-color:#288149; color:#FFFFFF;}
            .orange, .orange textarea { background-color:#F26B42; color:#FFFFFF;}
            .blue, .blue textarea { background-color:#286CB5; color:#FFFFFF;}
            .pink, .pink textarea { background-color:#F287B7; color:#FFFFFF;}
            .purple, .purple textarea { background-color:#B95DA4; color:#FFDBF7;}
        </style>
        <script type="text/javascript">
            jQuery(document).ready(function ($) {
                $('textarea').sudbadmin_editor();
            });
            /**
             * sodbadmin_editor插件
             * @param {Jquery-Plugin} $
             * @since 1.0 <2015-5-20> SoChishun Added
             * @example $('textarea').sudbadmin_editor();
             */
            (function ($) {
                $.fn.sudbadmin_editor = function (options) {
                    var opts = $.extend({}, $.fn.sudbadmin_editor.defaults, options);
                    return this.each(function () {
                        var $this = $(this);
                        reset_textarea($this);
                        reset_textarea_size($this);
                        jQuery(window).resize(function () {
                            reset_textarea_size($this);
                        });
                        $this.keydown(function (e) {
                            keydown_handler(e, $this);
                        });
                    });

                    /**
                     * 重置(清屏)Textarea
                     * @param {type} $ta
                     * @since 1.0 <2015-5-20> SoChishun Added.
                     */
                    function reset_textarea($ta) {
                        $ta.val('SuDbAdmin [版本 1.0.150520]\n版权所有 (c) 2015 SoChishun<14507247@qq.com>。保留所有权利。\n\n');
                    }

                    /**
                     * 重置编辑器尺寸
                     * @since 1.0 <2015-5-20> SoChishun Added.
                     */
                    function reset_textarea_size($ta) {
                        var w = $(document).width() - 20;
                        var h = $(document).height() - 20;
                        $ta.height(h).width(w);
                    }
                    /**
                     * 捕获键盘事件
                     * @param {event} e 事件源
                     * @param {jqurey} $ta textarea控件对象
                     * @since 1.0 <2015-5-20> SoChishun Added.
                     */
                    function keydown_handler(e, $ta) {
                        var e = e || event;
                        var currKey = e.keyCode || e.which || e.charCode;
                        if (13 == currKey) { // Enter
                            if ('' == $.trim($ta.val())) {
                                return;
                            }
                            var pos = $ta.val().lastIndexOf('\n');
                            var cmd = pos < 0 ? $ta.val() : $ta.val().substring(pos + 1);
                            run_cmd(cmd, $ta);
                        }
                    }
                    /**
                     * 运行命令
                     * @param {type} cmd
                     * @param {type} $ta
                     * @since 1.0 <2015-5-20> SoChishun Added.
                     */
                    function run_cmd(cmd, $ta) {
                        cmd = $.trim(cmd);
                        // 命令帮助提示
                        if ('?' == cmd[0]) {
                            run_help_command(cmd, $ta);
                            return;
                        }
                        // 忽略示例命名
                        if (cmd.length > 3 && 'eg.' == cmd.substring(0, 3)) {
                            return;
                        }
                        var precmd = cmd.indexOf(' ') > -1 ? cmd.substring(0, cmd.indexOf(' ')) : cmd;
                        switch (precmd.toLowerCase()) {
                            case 'clear':
                                reset_textarea($ta);
                                break;
                            case 'exit':
                                append_value('bye :)', $ta);
                                if (confirm('您确定要关闭当前页面吗?')) {
                                    window.open('','_self','');
                                    window.close();
                                }
                                break;
                            case 'help':
                                append_value("说明：输出模板以单引号括起来\n1. use-table <table>: 瞄定数据表,作为默认值供后续操作使用\n2. list-fields [table] [template]:  显示<table>的所有字段名称\n\t@params [table] 数据表名称,为空则使用上次use table <table>指定的表名称,如 mytable, mydb.mytable\n\t@params [template] 输出模板,{0}为占位符,默认'{0}\\n'\n\t@example\n\t\t1.list-fields '{0}=>\'{0}\',' 返回field1=>'field1',field2=>'field2',field3=>'field3'\n\t\t2.list-fields '\n* @params {type} $p{stype}_{name} {comment} 返回* @param int $pint_id 主键编号\n3. su-list tables [database] [template]: 显示<database>中所有数据表名称\n\t@params [database] 数据库名称,为空则使用默认数据库\n\t@params [template] 输出模板,{0}为占位符,默认'{0}\\n'\n\t@example \n\t\t1.'drop table {0};\n' 返回 drop table mytable;\n4. show-template <table> <short-command> 显示<table>的CURD模板,\n\t@params <short-command> 支持数据表:c(create增)|u(update改)|r(read查)|d(delete删),存储过程:cprocedure|uprocedure|rprocedure|dprocedure,函数:cfunction|ufunction|rfunction|dfunction,视图:cview|uview|rview|dview命令\n\t@example\n\t\t1.show template u 返回 update mytable set field1='field1'...\n\t\t2.show template cview 返回 create view ..\n5. open -n<linkid> [-t<dbtype> -h<host> -u<uid> -p<pwd> -c[charset] -d[database]]打开新数据库连接\n\t@params <linkid> 连接编号,必需唯一,用于关闭连接时使用\n\t@params <dbtype> 数据库类型,暂时只支持MYSQL和MSSQL\n\t@params <host> 服务器地址\n\t@params <uid> 登录名\n\t@params <pwd> 登录密码\n\t@params [charset] 字符集,默认UTF8\n\t@params [database] 数据库名称\n\t@example \n\t\t1.open -nmylink -tmysql -hlocalhost -uroot -p -cutf8 -dmydb; 打开名称为mylink的连接并放入连接池,如果已存在mylink连接则修改并重新打开\n\t\t2.open -nmylink 从连接池打开名为mylink的连接(mylink已经以第一种示例方法打开过了)\n6. close <linkid> 关闭数据库连接\n7. show-connections 查看连接池中所有连接的信息(包含状态)\n8. theme <name> 设置主题或设置前景色和背景色\n\t@params <name> 预设的主题名称,包含：default|green|orange|blue|black|pink\n9. 常用命令：\n\tclear 清屏\n\texit 退出\n\thelp 帮助\n\tv 版本信息", $ta);
                                break;
                            case 'v':
                                append_value('Version: 1.0 <2015-5-20>\n作者: SoChishun <14507247@qq.com>', $ta);
                                break;
                            case 'theme':
                                var theme = cmd.substring(cmd.lastIndexOf(' ') + 1);
                                $ta.parent().removeClass().addClass(theme);
                                break;
                            default:
                                var url = 'http://localhost:8068/ProjectResourceLibrary/Tool/suDbAdmin.php';
                                $.post(url, {'cmd': cmd}, function (data) {
                                    if (!data || !data.info) {
                                        append_value('抱歉,返回数据有误...\n', $ta, false);
                                    }
                                    append_value(data.info + '\n', $ta, false);
                                    /*if (data.status) {
                                     append_value(data.info, $ta);
                                     } else {
                                     alert(data.info);
                                     }*/
                                });
                                break;
                        }
                    }
                    /**
                     * 运行命令帮助,协助输入命令
                     * @param {string} cmd
                     * @since 1.0 <2015-5-21> SoChishun Added.
                     * @example ?open
                     */
                    function run_help_command(cmd, $ta) {
                        cmd = cmd.substring(1);
                        if (cmd.indexOf(' ') > -1) {
                            cmd = cmd.substring(0, cmd.indexOf(' '));
                        }
                        switch (cmd.toLowerCase()) {
                            case 'use-table':
                                append_value('eg.use-table <table>', $ta);
                                break;
                            case 'list-fields':
                                append_value('eg.list-fields [table] [template]', $ta);
                                break;
                            case 'list-tables':
                                append_value('eg.list-tables [database] [template]', $ta);
                                break;
                            case 'show-template':
                                append_value('eg.show-template <table> <short-command>', $ta);
                                break;
                            case 'open':
                                append_value('eg.open -n<linkid> [-t<dbtype> -h<host> -u<uid> -p<pwd> -d[database]] -c[charset]', $ta);
                                break;
                                break;
                            case 'list-connection':
                                append_value('eg.list-connection', $ta);
                                break;
                            case 'theme':
                                append_value('eg.theme <name>', $ta);
                                break;
                            default:
                                break;
                        }
                    }
                    /**
                     * 往textarea追加字符串
                     * @param {type} v
                     * @param {type} $ta
                     * @param {boolean} new_line 是否新行
                     * @since 1.0 <2015-5-20> SoChishun Added.
                     */
                    function append_value(v, $ta, new_line) {
                        $ta.val($ta.val() + (false == new_line ? '' : '\n') + v);
                    }
                };
                $.fn.sudbadmin_editor.defaults = {allowEmpty: true};
            })(jQuery);
        </script>
    </head>
    <body>
        <div class="default"><textarea cols="120" rows="30" autofocus="autofocus"></textarea></div>
    </body>
</html>
